Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/64: Рейтинг темы: голосов - 64, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.07.2011
Сообщений: 61

Вывод данных из БД MySQL с использованием MVC и ООП

21.02.2012, 13:27. Показов 11930. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть БД testing с таблицей testing с тремя полями: id, FIO, gryppa. Есть файл index.php следующего содержания:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$connect = mysql_connect('localhost','root','');
$op      = mysql_select_db("testing",$connect);
 
$result  = mysql_query("SELECT * FROM testing");
 
$n = mysql_num_rows($result);
 
echo "<table border=1>";
 
for($i=0;$i<$n;$i++) {
    echo "<tr><td>",mysql_result($result,$i,FIO),"</td><td>",mysql_result($result,$i,gryppa),"</td></tr>";
    }
 
echo "</table>";
Вопросов 2:
1) Как переделать код с использованием MVC (то есть разделить на view.html и controller.php)?
2) Как переписать код с использованием объектно-ориентированной парадигмы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2012, 13:27
Ответы с готовыми решениями:

Переход с mysql на mysqli ООП + MVC
Здравствуйте. Было написано несколько проектов mysql + MVC. Есть желание перейти на mysqli ООП + MVC. Но я не очень понимаю сам принцип и...

-ООП+ -MVC Выборка данных из БД
Всем привет! Столкнулся с проблемой логики))))Точнее с логикой проблемы у меня видимо)) Из названия темы видно, что я пытаюсь изучить... ...

Вывод из БД с использованием ООП, PDO и namespace
Код работает, правильно ли я всё сделал? Какие недочёты есть? index.php &lt;?php header('Content-Type: text/html;...

13
 Аватар для nonamez123
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
21.02.2012, 13:53
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
 
 
<?php
class MyClass extends database
{   
    var $data_array=array();
 
    function __construct(){
        parent::connect();
        self::add_data_to_db();
        self::get_data_from_db();
        parent::close();
        self::find();
        self::format_data();
    }
 
    function get_data_from_db() {
        $query = ("SELECT * FROM testing");
        $result = mysql_query($query) or die(mysql_error());
 
        //тут формируем массив с данными
    }
 
    function format_data(){
        //тут выводим инфу
    }
 
 
}
 
class database{
        
        var $conn;
 
        public function connect() {
            $server="localhost";
            $user="root";
            $password="159753";
            $db="meniu";
 
            $this->conn=mysql_connect($server, $user, $password) or die(mysql_error());
 
            if(mysql_select_db($db)){
                //echo "ok";
            }
        }
 
        function close(){
            mysql_close($this->conn);  
        }
 
 
 
}
new MyClass;
?>
1
0 / 0 / 0
Регистрация: 21.07.2011
Сообщений: 61
21.02.2012, 14:14  [ТС]
А для формирования данных и вывода надо как-то использовать массив, что был ранее объявлен? А то при
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    function get_data_from_db() {
        $query = ("SELECT * FROM testing");
        $result = mysql_query($query) or die(mysql_error());
 
        //тут формируем массив с данными
    }
 
    function format_data(){
        echo "<table border=1>";
    for($i=0;$i<$n;$i++) {
        echo "<tr><td>",mysql_result($result,$i,FIO),"</td><td>",mysql_result($result,$i,gryppa),"</td></tr>";
        }
        echo "</table>";
    }
Выводится только пустая таблица
0
 Аватар для nonamez123
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
21.02.2012, 14:19
ну по стандартам программирования красивого или хз как это там назвать... В общем вывод из базы и формирование инфы в html не может должно быть... Как-то так... Я пока сам в эти стандарты не вникаю...
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
21.02.2012, 16:05
что за запись такая?
Цитата Сообщение от Няшная няшка Посмотреть сообщение
function format_data(){
echo "<table border=1>";
for($i=0;$i<$n;$i++) {
echo "<tr><td>",mysql_result($result,$i,FIO), "</td><td>",mysql_result($result,$i,gryppa) ,"</td></tr>"; }
echo "</table>"; }
почему 2 раза используется mysql_result??? Сделайте массив из данных и цыклом выведите где хотите, хоть в таблице, или просто так

Добавлено через 31 минуту
а еще mvc с ооп, ..
думаю эта ф-я не нужна
Цитата Сообщение от Няшная няшка Посмотреть сообщение
function format_data(){
В классе есть метод get_data_from_db(), который возвращает массив данных (Этот и подобные ему классы и образуют модель, т.е., они ничего сами по себе не делают, это есть чистая логика, а действие совершают Контроллеры), теперь надо обратиться к нему (вот тут пишем все в контроллере). Чтобы обратиться к методу класса нужен объект класса
PHP
1
2
3
4
5
6
// вот наш объект
$obj = new MyClas;
 
// теперь вытащим наши данные обратившись к методу класса через объект
// не уверен за правильность написания, с ООП знаком поверхностно
$data = $this->obj->format_data();
Теперь в $data массив данных из БД. Теперь можно подключить
Цитата Сообщение от Няшная няшка Посмотреть сообщение
view.html
и передать туда наш массив и цыклом вывести
1
0 / 0 / 0
Регистрация: 21.07.2011
Сообщений: 61
21.02.2012, 23:28  [ТС]
О, всем чмоки, всё работает!
model.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php 
class database{
        
    var $connect;
    var $selectDatabase;
 
    public function connect() {
        $server   = "localhost";
        $user     = "root";
        $password = "";
        $db       = "testing";
 
        $this->connect        = mysql_connect($server, $user, $password) or die(mysql_error());
        $this->selectDatabase = mysql_select_db($db); 
        
    }
 
    function close(){
        mysql_close($this->conn);  
    }
 
}
?>
controller.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php 
include_once 'model.php';
 
class GetDataFromDatabase extends database
{   
    var $FIO    = array();
    var $gryppa = array();
    var $numRows;
 
    function __construct(){
        parent::connect();
        self::get_data_from_db();
        parent::close();
    }
 
    function get_data_from_db() {
        $query  = ("SELECT * FROM testing ORDER BY id");
        $result = mysql_query($query) or die(mysql_error());
        
        $i = 0;
        while ($myrow = mysql_fetch_array ($result)) {
            $this->FIO[$i]=$myrow['FIO'];
            $this->gryppa[$i]=$myrow['gryppa'];
            $i++;
        }
        $this->numRows = $i;
    }
 
}
?>
view.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php include_once 'controller.php';?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
 
<body>
<table>
 
<?php 
$GetDataFromDatabase = new GetDataFromDatabase;
$i = 0;
while ($i <= $GetDataFromDatabase->numRows) {
    echo "<tr><td>".$GetDataFromDatabase->FIO[$i]."</td><td>".$GetDataFromDatabase->gryppa[$i]."</td></tr>";
    $i++;    
}
?>
 
</table>
</body>
</html>
Но 2 вопроса остались:
1) Зачем нужен function __construct()?
2) Можно ли переписать представленный ниже блок не по принципу "вставка HTML в PHP", а по принципу "вставка PHP в HTML"?
PHP
1
2
3
4
5
6
7
8
<?php 
$GetDataFromDatabase = new GetDataFromDatabase;
$i = 0;
while ($i <= $GetDataFromDatabase->numRows) {
    echo "<tr><td>".$GetDataFromDatabase->FIO[$i]."</td><td>".$GetDataFromDatabase->gryppa[$i]."</td></tr>";
    $i++;    
}
?>
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
22.02.2012, 01:08
Цитата Сообщение от Няшная няшка Посмотреть сообщение
1) Зачем нужен function __construct()?
в мануал http://www.php.ru/manual/language.oop5.decon.html
Цитата Сообщение от Няшная няшка Посмотреть сообщение
2) Можно ли переписать представленный ниже блок не по принципу "вставка HTML в PHP", а по принципу "вставка PHP в HTML"?
вабще то так и должно быть, вот так
Цитата Сообщение от Няшная няшка Посмотреть сообщение
<?php include_once 'controller.php';?>
не совсем правильно.
Лучше думаю создвать в каждом разделе (модуле, например модуль - новости. Каждый модуль лучше разместить в отдельную папаку с соответсвующим названием) спец. файл (маршрутизатор), назовем его route.php
В этом файле подключаем нужный котроллер текущего модуля и файл view.php, именно *.php расширение, а в этом файле уже switch'ом переключаешь нужные *.html (или *.tpl) шаблоны.
0
0 / 0 / 0
Регистрация: 21.07.2011
Сообщений: 61
22.02.2012, 01:31  [ТС]
А можно сказать про конструктор, что при создании экземпляра конструктор показывает в каком порядке должны выполняться функции класса?
0
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
22.02.2012, 16:33
Как задашь так и будут выполняться.
PHP синхронный язык.
0
0 / 0 / 0
Регистрация: 02.05.2015
Сообщений: 1
02.05.2015, 21:24
PHP
1
2
3
4
5
6
7
8
<?php 
$GetDataFromDatabase = new GetDataFromDatabase;
$i = 0;
while ($i <= $GetDataFromDatabase->numRows){
    echo "<tr><td>".$GetDataFromDatabase->FIO[$i]."</td><td>".$GetDataFromDatabase->gryppa[$i]."</td></tr>";
    $i++;    
}
?>
Данный код можно написать так:
PHP
1
2
3
4
5
6
7
<?
$GetDataFromDatabase = new GetDataFromDatabase;
$i = 0;
while ($i <= $GetDataFromDatabase->numRows) :?>
    <tr><td><?=$GetDataFromDatabase->FIO[$i];?></td><td><?=$GetDataFromDatabase->gryppa[$i];?></td></tr>
<? $i++; ?>
<?endwhile?>
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
02.05.2015, 22:16
Цитата Сообщение от Няшная няшка Посмотреть сообщение
$GetDataFromDatabase = new GetDataFromDatabase;
я думаю, такого в виде быть не должно.
нужно сформировать массив, а в шаблоне, при помощи foreach вывести
0
03.05.2015, 06:51

Не по теме:

22.02.2012, 18:33
Вчера, 23:24
:scratch:

Добавлено через 33 секунды
Prikylos, какой у Вас год? :)

0
03.05.2015, 23:00

Не по теме:

Para bellum, у меня сейчас 2018, например, а что? Вы что-то подозреваете? :scratch:

0
04.05.2015, 10:00

Не по теме:


Цитата Сообщение от FraidZZ Посмотреть сообщение
у меня сейчас 2018
Мне из будущего пишут. :yahoo:
Пошёл на ТВЗ интервью давать. :D

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2015, 10:00
Помогаю со студенческими работами здесь

Размещение авторизации в MVC с использованием ООП – best practices? где?
Доброго времени суток! Пишу свою MVC (обучения для), без фреймворков. И встал вопрос о регистрации/авторизации. Где и как её лучше...

Вывод модулей на страницы с использованием паттерна MVC
Пишу систему управления с использованием MVC паттерна, написал клсс маршрутизации который в зависимости от запрошенного пользователем...

Вывод информации из БД с использованием Entity на ASP.NET MVC 4
Добрый день тыжпрограммисты, прошу вашей помощи) Постараюсь объяснить по пунктам. Создана база данных Database, создана таблица...

Dropdownlist, MVC, MySql передача данных из коллекции
Доброго времени суток, такой вопрос. Есть коллекция куда передается данные с таблицы. Как можно сделать dropdownlist из элементов этой...

Ajax отправка данных из формы в базу mysql и вывод из базы mysql
$(function() { $('#chat_submit').click(function(e) { e.preventDefault(); var chat_name =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru